package com.fruit.service.promotion;

import java.math.BigDecimal;
import java.util.Map;
import java.util.Set;

import com.fruit.pojo.account.repeat.RepeatInfo;
import com.fruit.pojo.promotion.ActivityUserRelation;

/**
 * 活动Manager
 *
 * @author Administrator
 * @version 2018.02.06 17:02
 *
 */
public interface ActivityManager {

	/**
	 * 根据活动ID 父级用户ID 查询下级用户
	 * 
	 * @param tradeId 全局ID
	 * @param activityId
	 *            活动ID
	 * @param userId
	 *            用户ID
	 * @param type 类型
	 * @return 下级用户
	 */
	Map<String, Object> getActivityUserRelationByParentId(String tradeId, int activityId, int userId, String type);
	
	/**
	 * 插入活动用户关系
	 * @param tradeId 全局ID
	 * @param aur 参数
	 * @return 插入条数
	 */
	Map<String, Object> insertActivityUserRelation(String tradeId, ActivityUserRelation aur);
	
	/**
	 * 插入活动用户关系
	 * @param tradeId 全局ID
	 * @param transId 账单ID
	 * @param activityId 活动ID
	 * @param userId 用户ID
	 * @param goodsId 商品id
	 * @param amount 消费金额
	 * @return 结果
	 */
	Map<String, Object> saveActivityUserRelation(String tradeId, long transId, int activityId, int userId, int goodsId, BigDecimal amount);
	
	/**
	 * 保存活动用户信息
	 * @param tradeId 全局ID
	 * @param type (1-累计消费 2-返利 3-分红 4-复投)
	 * @param activityId 活动ID
	 * @param userId 用户ID
	 * @param amount 消费金额
	 * @return 插入结果
	 */
	Map<String, Object> saveActivityUserInfo(String tradeId, String type, int activityId, int userId, BigDecimal amount);
	
	/**
	 * 保存复投信息
	 * @param repeatInfo 复投信息
	 * @return 结果
	 */
	Map<String, Object> saveActivityRepeat(RepeatInfo repeatInfo);
	
	/**
	 * 获取活动用户见点上级
	 * @param activityId 活动Id
	 * @param userId 用户Id
	 * @param top 层级
	 * @return 返回用户列表
	 */
	Map<String, Object> getIndirectParents(Integer activityId, Integer userId, Integer top);
	
	/**
	 * 更新活动用户返利
	 * @param userIds 用户Id
	 * @param activityId 活动Id
	 * @return 返回更新结果
	 */
	Map<String, Object> updateActivitySalesVolume(Integer activityId, Set<Integer> userIds);
	
	/**
	 * 返回活动公排结构
	 * @param code 活动编码
	 * @param userId 用户ID
	 * @param layer 层级
	 * @return 公排结构
	 */
	Map<String, Object> getActivityTreeList(String code, Integer userId, int layer);
	
	/**
	 * 添加公排子节点
	 * @param code 活动编码
	 * @param userId 用户ID
	 * @param phone 手机号
	 * @return 添加结果
	 */
	Map<String, Object> addActivityTree(String code, Integer userId, String phone);
	
	/**
	 * 变更公排节点
	 * @param code 活动编码
	 * @param userId 用户ID
	 * @param phone 手机号
	 * @return 添加结果
	 */
	Map<String, Object> updateActivityTree(String code, Integer userId, String phone);
	
}
